home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
WD_SRC.ZIP
/
SYSTEM
/
TIMER.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1995-01-30
|
1KB
|
80 lines
#include "..\Source\LastWolf.hpp"
#define CONTROL_8253 0x43
#define CONTROL_WORD 0x3C
#define COUNTER_0 0x40
#define TIME_KEEPER_INT 0x1C
#define ORIGINAL_TIMER_HZ 65534
#define TIMER_182HZ 6555
#define TIMER_60HZ 0x4DAE
#define TIMER_30HZ 0x965C
#define TIMER_20HZ 0xE90B
#define TIMER_18HZ 0xFFFF
#define LOBYTE(n) (n & 0x00FF)
#define HIBYTE(n) ((n>>8) & 0x00FF)
#ifdef DOS
// Pointer to the old timer routine.
void (__interrupt __far *Old_Isr)();
// The new timer routine.
void __interrupt Timer()
{
timeCount++;
if( timeCount % 10 == 0 )
Old_Isr();
}
// Resets the timer count.
void Change_Time( unsigned int new_count )
{
outp( CONTROL_8253, CONTROL_WORD );
outp( COUNTER_0, LOBYTE(new_count) );
outp( COUNTER_0, HIBYTE(new_count) );
}
void t_StartTimer()
{
timeCount=0;
Change_Time(TIMER_182HZ);
Old_Isr = _dos_getvect( TIME_KEEPER_INT );
_dos_setvect( TIME_KEEPER_INT, Timer );
}
void t_EndTimer()
{
Change_Time( ORIGINAL_TIMER_HZ );
_dos_setvect( TIME_KEEPER_INT, Old_Isr );
}
#else // (#ifdef DOS)
void t_StartTimer()
{
timeCount=0;
}
void t_EndTimer()
{
timeCount=1;
}
#endif